package yjj.utils;

import java.lang.reflect.Field;

public class MyBeanUtil {

    /**
     * 合并两个对象的属性，将源对象的属性值拷贝到目标对象中
     * @param src 源对象
     * @param target 目标对象
     */
    public static void mergeProperties(Object src, Object target) {
        try {
            // 获取源对象和目标对象的所有字段
            Field[] srcFields = src.getClass().getDeclaredFields();
            Field[] targetFields = target.getClass().getDeclaredFields();

            // 遍历源对象的字段
            for (Field srcField : srcFields) {
                srcField.setAccessible(true);// 设置源对象的字段可访问
                Object srcValue = srcField.get(src);//返回此 Field 在指定对象上表示的字段的值

                // 如果源对象的字段值不为null，且目标对象中也有该字段，则拷贝
                for (Field targetField : targetFields) {
                    targetField.setAccessible(true);
                    if (targetField.getName().equals(srcField.getName())) {
                        if (srcValue != null) {
                            targetField.set(target, srcValue);
                        }
                    }
                }
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}
